#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
//
//int main()
//{
//  int p1=5;
//  //创建5个子进程
//  while(p1>0)
//  {
//      pid_t d = fork();
//      if(d==0)
//      {
//        printf("我是子进程%d丫\n",getpid());
//        sleep(2);
//        exit(0);
//      }
//      else
//      {
//        while(1)
//        {   
//          //非阻塞等待,每执行一次就会回收一次
//          pid_t pc = waitpid(-1,NULL,WNOHANG);
//          if(pc==0)
//          {
//            printf("我可以自己干自己的事情!\n");
//            sleep(2);
//          }
//          else if(pc>0)
//          {
//            printf("回收成功!\n");
//            //每次确保回收完一个子进程
//            break;
//          }
//          else
//          {
//            printf("执行错误\n");
//            break;
//          }
//        }
//      }
//      printf("p1==%d\n",p1--);
//  }
//  return 0;
//}

int main()
{
  //创建子进程
  pid_t pc = fork();
  if(pc==0)
  {
    //char p1[]="ls";
    //char p2[]="NULL";
    //char* const argv[]=
    //{
    //  "Hello=12345",
    //  "PATH=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    //  "PATH=/home/username/测试",
    //  NULL
    //};
    extern char**environ;
    //替换子进程的代码数据
    int count = execle("/home/username/测试","测试",NULL,environ);
    if(count<0)
    {
      printf("调用失败\n");
    }
    exit(0);
  }
  //回收机制
  pid_t wait=waitpid(-1,NULL,0);
  if(wait>0)
  {
    printf("回收成功!\n");
  }
  else if(wait==0)
  {
    printf("正在回收!\n");
  }
  else{
    printf("回收失败!\n");
  }
  return 0;
}
